package com.algorithm.tree;

/**
 * 二叉搜索树
 *
 * @author : fujc-dev@qq.com
 * @created : 2022/9/5 8:31
 */

public class BinarySearchTree {

    int data;
    BinarySearchTree left;
    BinarySearchTree right;


    /**
     * 构建树结点
     */
    public BinarySearchTree(int data) {
        this.data = data;
        this.left = null;
        this.left = null;
    }


    /**
     * 插入的时候每次都是和根结点比较。一直要找到它应该插入的位置。肯定会插在叶子结点。
     * <p>
     * 默认root不会为空。
     * </p>
     *
     * @param root 根结点
     * @param data 值
     */
    public void insert(BinarySearchTree root, int data) {
        // 根结点小于当前写入的数据，放在右边
        if (root.data < data) {
            if (root.right == null) {
                root.right = new BinarySearchTree(data);
            } else {
                // 把右边看成一颗子树
                insert(root.right, data);
            }
        } else {
            if (root.left == null) {
                root.left = new BinarySearchTree(data);
            } else {
                // 把左边看成一颗子树
                insert(root.left, data);
            }
        }
    }


    /**
     * 查找
     *
     * @param root 根结点
     * @param data 值
     */
    public void find(BinarySearchTree root, int data) {
        if (root != null) {
            if (root.data < data) {
                find(root.right, data);
            } else if (root.data > data) {
                find(root.left, data);
            } else {
                System.out.println("找到了：" + root.data);
            }
        }
    }

    /**
     * 删除
     *
     * @param root 根结点
     * @param data 值
     */
    public void delete(BinarySearchTree root, int data) {

    }

    public static void main(String[] args) {

    }


}
